﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.akima
    光滑插值
    参数 n: n给定的结点个数。
    参数 x: x[n]存放给定的n个结点值。
    参数 y: y[n]存放给定n个结点上的函数值。
    参数 t: 指定的插值点。
    参数 s: s[4]返回插值点所在子区间上的三次多项式系数。
    返回值 函数返回指定插值点处的函数近似值。
    */

    public static string drive_akima(int w, int h)
    {
        int n;
        double t, z;
        double[] x = new double[11] { -1.0, -0.95, -0.75, -0.55, -0.3, 0.0, 0.2, 0.45, 0.6, 0.8, 1.0 };
        double[] y = new double[11] { 0.0384615, 0.0424403, 0.06639, 0.116788, 0.307692, 1.0, 0.5, 0.164948, 0.1, 0.0588236, 0.0384615 };
        double[] s = new double[4];

        n = 11;

        int pk = 20;
        double[] px = new double[(x.Length - 1) * pk + 1];
        double[] py = new double[(x.Length - 1) * pk + 1];
        for (int i = 0; i < x.Length - 1; i++)
        {
            for (int j = 0; j <= pk; j++)
            {
                px[i * pk + j] = x[i] + (x[i + 1] - x[i]) * ((double)j / (double)pk);
                py[i * pk + j] = gl.akima(n, x, y, px[i * pk + j], s);
            }
        }

        return html_image(w, h, px, py,
            new double[] { -1.0, -0.5, 0.0, 0.5, 1.0 },
            new double[] { 0.0, 0.2, 0.4, 0.6, 0.8, 1.0 },
            x, y);
    }
}